/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package it.zypapp.backingBean;

import it.zypapp.entity.Capi;
import it.zypapp.entity.Clienti;
import it.zypapp.entity.LavorazioneTipi;
import it.zypapp.util.SessionHibernateUtil;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.event.ActionEvent;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.primefaces.context.RequestContext;

import org.primefaces.event.FlowEvent;

/**
 *
 * @author utente
 */

public class ClientiBB {

    private List<Clienti> cli;
    private List<Clienti> fcli;
    private List<LavorazioneTipi> lt;
    private List<LavorazioneTipi> flt;
    private LavorazioneTipi lavorazioniTipi;
    private LavorazioneTipi[] lavorazioniArray;
    private List<LavorazioneTipi> lavorazioniSelezionate;
    private Clienti cliente;
    private LavorazioniSelezionateDataModel mediumLTModel; 
    private boolean skip;

    public BigDecimal getTotale() {
        List<LavorazioneTipi> lt = getLavorazioniSelezionate();
        BigDecimal totale = new BigDecimal(0);
        if (lt != null && lt.size() > 0) {
            Iterator i = lt.iterator();

            while (i.hasNext()) {
                LavorazioneTipi lti = (LavorazioneTipi) i.next();
                if (lti != null)
                totale = totale.add(lti.getPrezzo());
            }
        } else {
            totale = new BigDecimal(0);
        }
        return totale;
    }

    public List getAllClienti() {
        SessionFactory sf = SessionHibernateUtil.getSessionFactory();
        Session session = sf.openSession();
        session.beginTransaction();

        ClientiBB clienti = new ClientiBB();

        Query query = session.createQuery("from Clienti");
        query.setCacheable(true);

        setCli((List<Clienti>) query.list());

        session.getTransaction().commit();

        return (List<Clienti>) query.list();
    }

    public List getAllLavorazioni() {
        SessionFactory sf = SessionHibernateUtil.getSessionFactory();
        Session session = sf.openSession();
        session.beginTransaction();

        ClientiBB clienti = new ClientiBB();

        //List lclienti = session.createQuery("from LavorazioneTipi").list();
        Query query = session.createQuery("from LavorazioneTipi");
        query.setCacheable(true);
        setCli((List<Clienti>) query.list());
        session.getTransaction().commit();
        return (List<Clienti>) query.list();
    }

    public void setLavorazioneSel(LavorazioneTipi lavorazione) {
        if (getLavorazioniSelezionate() == null) {
            setLavorazioniSelezionate(new ArrayList<LavorazioneTipi>());
        }
        if(lavorazione != null)
        getLavorazioniSelezionate().add(lavorazione);
        setMediumLTModel(new LavorazioniSelezionateDataModel(getLavorazioniSelezionate()));  
    }

    public void delete(ActionEvent actionEvent) {
       //getLT();
        
        for (int x = 0;lavorazioniArray.length>0;x++) {
            //LavorazioniTipi lt = getMediumLTModel().getRowData(lavorazioniArray[x].getIdTipoLavorazione());
            
        }
        
        System.out.println("zxzxzx");        
    }
    public List filteredClienti() {
        return getCli();

    }

    /**
     * @return the cli
     */
    public List<Clienti> getCli() {
        return cli;
    }

    /**
     * @param cli the cli to set
     */
    public void setCli(List<Clienti> cli) {
        this.cli = cli;
    }

    /**
     * @return the fcli
     */
    public List<Clienti> getFcli() {
        return fcli;
    }

    /**
     * @param fcli the fcli to set
     */
    public void setFcli(List<Clienti> fcli) {
        this.fcli = fcli;
    }

    /**
     * @return the cliente
     */
    public Clienti getCliente() {
        return cliente;
    }

    /**
     * @param cliente the cliente to set
     */
    public void setCliente(Clienti cliente) {
        this.cliente = cliente;
    }

    public boolean isSkip() {
        return skip;
    }

    public void setSkip(boolean skip) {
        this.skip = skip;
    }

    public String onFlowProcess(FlowEvent event) {

        if (skip) {
            skip = false;   //reset in case user goes back  
            return "confirm";
        } else {
            return event.getNewStep();
        }
    }

    /**
     * @return the lt
     */
    public List<LavorazioneTipi> getLt() {
        return lt;
    }

    /**
     * @param lt the lt to set
     */
    public void setLt(List<LavorazioneTipi> lt) {
        this.lt = lt;
    }

    /**
     * @return the flt
     */
    public List<LavorazioneTipi> getFlt() {
        return flt;
    }

    /**
     * @param flt the flt to set
     */
    public void setFlt(List<LavorazioneTipi> flt) {
        this.flt = flt;
    }

    /**
     * @return the lavorazioniTipi
     */
    public LavorazioneTipi getLavorazioniTipi() {
        return lavorazioniTipi;
    }

    /**
     * @param lavorazioniTipi the lavorazioniTipi to set
     */
    public void setLavorazioniTipi(LavorazioneTipi lavorazioniTipi) {
        this.lavorazioniTipi = lavorazioniTipi;
        setLavorazioneSel(lavorazioniTipi);
    }

    /**
     * @return the lavorazioniSelezionate
     */
    public List<LavorazioneTipi> getLavorazioniSelezionate() {
        return lavorazioniSelezionate;
    }

    /**
     * @param lavorazioniSelezionate the lavorazioniSelezionate to set
     */
    public void setLavorazioniSelezionate(List<LavorazioneTipi> lavorazioniSelezionate) {
        this.lavorazioniSelezionate = lavorazioniSelezionate;
    }

    /**
     * @return the mediumLTModel
     */
    public LavorazioniSelezionateDataModel getMediumLTModel() {
        return mediumLTModel;
    }

    /**
     * @param mediumLTModel the mediumLTModel to set
     */
    public void setMediumLTModel(LavorazioniSelezionateDataModel mediumLTModel) {
        this.mediumLTModel = mediumLTModel;
    }

    /**
     * @return the LT
     */
    
    /**
     * @return the lavorazioniArray
     */
    public LavorazioneTipi[] getLavorazioniArray() {
        return lavorazioniArray;
    }

    /**
     * @param lavorazioniArray the lavorazioniArray to set
     */
    public void setLavorazioniArray(LavorazioneTipi[] lavorazioniArray) {
        this.lavorazioniArray = lavorazioniArray;
    }

    /**
     * @param LT the LT to set
     */
    
}
